package com.own.component.elastic.service;

import com.own.component.common.base.entity.po.BaseBean;
import com.own.component.elastic.entity.BaseElasticPo;

import java.util.Collection;

/**
 * BaseElasticOperationService
 *
 * @author chenxueli
 * @date 2022-09-03 19:17:00
 */
public interface BaseElasticOperationService<
        PO extends BaseBean,
        ELASTIC_PO extends BaseElasticPo<PO>
        > {

    /**
     * 插入数据
     *
     * @param po 添加的对象
     */
    void add(ELASTIC_PO po);

    /**
     * 批量插入数据
     *
     * @param list 列表数据
     */
    void batchAdd(Collection<ELASTIC_PO> list);

    /**
     * 修改数据
     *
     * @param id 主键id
     * @param po 添加的对象
     */
    void update(String id, ELASTIC_PO po);

    /**
     * 修改或插入数据
     *
     * @param id 主键id
     * @param po 添加的对象
     */
    void upsert(String id, ELASTIC_PO po);

    /**
     * 批量修改或插入数据
     *
     * @param list 列表数据
     */
    void batchUpsert(Collection<ELASTIC_PO> list);

    /**
     * 删除数据
     *
     * @param id 主键id
     */
    void delete(String id);

    /**
     * 批量删除数据
     *
     * @param idList 主键id列表
     */
    void batchDelete(Collection<String> idList);

    /**
     * 路由参数
     *
     * @param po 添加的对象
     * @return 路由参数
     */
    default String routing(ELASTIC_PO po) {
        return null;
    }

}
